package main

import (
	"fmt"
	"os"
	"os/user"
	"path/filepath"
)

func main() {
	//path := "./dir"
	path := "G:\\workspace_gitee\\golang\\golang-web\\code_example\\work_with_go"

	filepath.Walk(path, func(fn string, fi os.FileInfo, err error) error {
		if err != nil {
			fmt.Println("Walker Error: ", err)
			return err
		}

		if fi.IsDir() {
			fmt.Println("Directory: ", fn)
			if fi.Name() == "skipme" {
				return filepath.SkipDir
			}
		} else {
			fmt.Println("File: ", fn)
		}
		return nil
	})

	usr, _ := user.Current()
	fmt.Println("User Home Directory:", usr.HomeDir)

}

/**
避免了直接调用os.Mkdir创建可能已存在的目录,而是先检查目录是否存在,不存在再创建,存在则跳过。这样可以避免创建已存在目录时抛出错误
*/
func mkdir(path string, dir string, dirpath string) {
	// 使用filepath.Join把路径path和目录名dir组合成一个完整的目录路径pathdir
	pathdir := filepath.Join(path, dir)
	// 使用os.Stat检查pathdir是否存在
	// os.IsNotExist(err)如果pathdir不存在,则调用os.Mkdir去创建这个目录。os.Mkdir的第二个参数0755表示使用八进制数设置目录权限为rwxr-xr-x
	if _, err := os.Stat(pathdir); os.IsNotExist(err) {
		mdErr := os.Mkdir(dirpath, 0755)
		// 如果os.Mkdir失败则打印错误
		if mdErr != nil {
			fmt.Println("Error making directory", mdErr)
		}
	}
}
